/**
 * @description user 控制层
 * @author LI
 */

const {
  createGoods,
  getGoodsList,
  updateGoodById,
  deleteGoodById
} = require('../services/good')
const { ReturnResult } = require('../model/ResultModel')

/**
 * 添加商品信息
 * @param {string} goodSn 商品货号
 * @param {string} goodName 商品名称
 * @param {string} goodType 商品类型
 * @param {number} goodSort 商品排序
 * @param {string} goodImg 商品图片
 * @param {string} goodVideo 商品视频
 * @param {string} remark 商品视频描述
 */
async function addGoods({ goodSn, goodName, goodType, goodSort, goodImg, goodVideo, remark }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await createGoods({
      goodSn,
      goodName,
      goodType,
      goodSort,
      goodImg,
      goodVideo,
      remark
    })
    return new ReturnResult(0, null, true, "添加成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "添加失败，请重试")
  }
}

/**
 * 获取全部商品信息
 * @param {string} goodType 商品类型
 * @param {string} goodName 商品名称
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getGoodsAll({ goodType, goodName, page, limit }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await getGoodsList({
      goodType,
      goodName,
      page,
      limit,
    })
    return new ReturnResult(result.count, result.rows, true, "查询成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "查询失败，请重试")
  }
}

/**
 * 更新商品
 * @param {number} id id
 * @param {string} goodSn 商品货号
 * @param {string} goodName 商品名称
 * @param {string} goodType 商品类型
 * @param {number} goodSort 商品排序
 * @param {string} goodImg 商品图片
 * @param {string} goodVideo 商品视频
 * @param {string} remark 商品视频描述
 */
async function updateGood({ id, goodSn, goodName, goodType, goodSort, goodImg, goodVideo, remark }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await updateGoodById({
      id,
      goodSn,
      goodName,
      goodType,
      goodSort,
      goodImg,
      goodVideo,
      remark
    })
    return new ReturnResult(0, null, true, "更新成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "更新失败，请重试")
  }
}

/**
 * 删除账号
 * @param {number} id id
 */
async function deleteGood(id) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await deleteGoodById(id)
    return new ReturnResult(0, null, true, "删除成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "删除失败，请重试")
  }
}

module.exports = {
  addGoods,
  getGoodsAll,
  updateGood,
  deleteGood
}
